<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>call与apply的区别</title>
</head>
<body>
    
</body>
<script>
    /*
        函数虽然能够很方便让我们做到模块化开发  
            但是它的this指向一直是困住一大堆人  所以JS推出了call() 和 apply()来更改函数中this的指向
                总的来说 apply()  和 call()  就是方便我们修改函数中this指向的
    */
    let obj = {
        name:'xuexue',
        age:'22'
    }
    function user(name){
        console.log(this)
        this.name = name
        console.log(this)
    }
    let users = new user('jimmy')
    console.log(users)   // user {name: "jimmy"}   可见当使用构造函数的时候  它的this代表的就是这个函数本身

    user.call(obj,'jimmy')   // {name: "xuexue", age: "22"}
    /*
        使用了call了之后  user的this指向的就变成了obj  
            所以这时候user里面的name值修改的是obj中的name
    */

    user.apply(obj,['ry'])  //{name: "ry", age: "22"}

    /*
        由以上的例子，我们可以很容易的看出了call 和 apply的区别  
            他们都是用来修改函数this指向的  但是他们接收的参数是不同的
                call()第一个参数是this要指向的位置  后面的参数时以逗号的形式隔开
                apply()第一个参数时this要指向的位置  后面的参数要放在一个数组里面，以数组成员的形式展现
    */
</script>
</html>